オンプレミス環境のサーバーに CloudWatch エージェントを導入し、IAM ロールの権限でメトリクスやログを出力する方法

オンプレミス環境のサーバーに CloudWatch エージェントを導入し、IAM ロールの権限でメトリクスやログを出力する方法

オンプレミス環境のサーバーから CloudWatch エージェントを用いてカスタムメトリクスとログを送信する際に、Systems Manager のマネージドノードとして登録することで、ハイブリッドアクティベーションに紐づいた IAM ロールを用いることができます。また、環境変数を設定することで、AWS CLI コマンドも当該の IAM ロールを使用することが可能です。
Clock Icon2024.06.01

困っていること

オンプレミス環境のサーバーに CloudWatch エージェントを導入し、カスタムメトリクスを CloudWatch メトリクスに送信し、ログを CloudWatch Logs へ送信したいです。

しかしながら、オンプレミス環境のサーバーに IAM ユーザーのアクセスキーを発行し、クレデンシャル情報を登録する必要があり、セキュリティの関係上、これを避けたいです。

IAM ロールを使用する方法があれば、教えてください。

どう対応すればいいの?

オンプレミス環境のサーバーを Systems Manager のマネージドノードとして登録します。

その後、CloudWatch エージェントの common-config.toml ファイルにて、SSM エージェントが生成する認証情報を指定します。

これにより、CloudWatch エージェントが SSM エージェントの用いる認証情報を使用して、カスタムメトリクスの送信、及び、CloudWatch Logs へのログ出力を実現します。

やってみた

今回はローカル環境の Windows 10 をマネージドノードとして登録してみます。Linux の場合は、参考資料[1]を参考に適宜置き換えてください。

ハイブリッドアクティベーション用の IAM ロールを作成する

1. IAM コンソールから、IAM ロール作成画面へ推移する。

2. 信頼されたエンティティタイプとして、AWS のサービスを選択し、ユースケースのサービスに Systems Manager を選択する。

3. 許可ポリシーに下記 2 つのマネージドポリシーを追加する。

  • AmazonSSMManagedInstanceCore
  • CloudWatchAgentServerPolicy

4. 任意の名前(ここではSSMCloudWatchAgentRole)を指定し、ロールを作成する。

ハイブリッドアクティベーションを作成する

1. System Manager コンソールから、アクティベーションの作成画面へ推移する。

2. IAM ロールに「必要な許可を持つ既存のカスタム IAM ロールを選択する」を選択し、SSMCloudWatchAgentRoleを指定する。

3. Activation ID と Activation Code が発行されるため、テキストエディタなどに控える。

オンプレミス環境のサーバーに SSM エージェントをインストールし、マネージドノードとして登録する。

PowerShell を管理者権限で起動し、下記のコマンドレットを実行します。

[System.Net.ServicePointManager]::SecurityProtocol = 'TLS12'
$code = "activation-code"
$id = "activation-id"
$region = "ap-northeast-1"
$dir = $env:TEMP + "\ssm"
New-Item -ItemType directory -Path $dir -Force
cd $dir
(New-Object System.Net.WebClient).DownloadFile("https://amazon-ssm-$region.s3.$region.amazonaws.com/latest/windows_amd64/ssm-setup-cli.exe", $dir + "\ssm-setup-cli.exe")
./ssm-setup-cli.exe -register -activation-code="$code" -activation-id="$id" -region="$region"
Get-Content ($env:ProgramData + "\Amazon\SSM\InstanceData\registration")
Get-Service -Name "AmazonSSMAgent"

activation-code, activation-idはハイブリッドアクティベーション作成時に生成されたコード、$regionの値はマネージドノードとして登録したリージョンへと適宜変更ください。

※ SSM エージェントのインストールに失敗するなどのエラーが発生した場合、Windows AWS Tools for PowerShell を最新バージョンに更新してください[3]。

※ それでも失敗する場合は、PowerShell の文字コードを utf-8 に変更するために、下記のコマンドを実行してください。

chcp 65001

オンプレミス環境のサーバーに CloudWatch エージェントをインストールする

インストール方法についての詳細は割愛します。下記ドキュメントが参考になります。

CloudWatch エージェントのインストール - Amazon CloudWatch

common-config.toml ファイルを編集し、SSM エージェントによって生成された認証情報をポイントする

common-config.tomlファイルを用いて、CloudWatch エージェントが使用する認証情報や、プロキシの設定が可能です。

編集するファイルの場所

$Env:ProgramData\Amazon\AmazonCloudWatchAgent\common-config.toml

下記のように変更します。

[credentials] 
  shared_credential_profile = "default" 
  shared_credential_file = "C:\\Windows\\System32\\config\\systemprofile\\.aws\\credentials"

※ SSM エージェントによって生成される認証情報は C:\Windows\System32\config\systemprofile\.aws\credentials に保管されます。

SSM エージェントが参照する認証情報のフォルダに config ファイルを追加する

下記フォルダに認証情報が保存されています。

C:\Windows\System32\config\systemprofile\.aws

このフォルダに新規ファイルconfigを作成し、下記を入力します。

[default]
region = "ap-northeast-1"

$regionの値はマネージドノードとして登録したリージョンへと適宜変更ください。

CloudWatch エージェントの設定ファイルを適切に設定する

詳細については割愛しますが、動作検証目的であれば下記ドキュメントを参照にして、ウィザードで生成することがお手軽です。

CloudWatch エージェント設定ファイルを作成する - Amazon CloudWatch

CloudWatch エージェントを開始する

PowerShell 上で下記のコマンドを実行します。

& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m onPremise -s -c file:configuration-file-path

※file:configuration-file-path は前段のステップで作成した CloudWatch エージェントの設定ファイルを指定します。

その他の開始方法につきましては、下記のドキュメントをご参照ください。

オンプレミスサーバーへの CloudWatch エージェントのインストール - Amazon CloudWatch

補足:AWS CLI をハイブリッドアクティベーション用の IAM ロールを用いて実行する

環境変数AWS_SHARED_CREDENTIALS_FILEC:\Windows\System32\config\systemprofile\.aws\credentials に設定することで、ハイブリッドアクティベーションによって保存された認証情報を AWS CLI から参照することが可能となります。

下記コマンドでユーザーの環境変数に追加できます。

[Environment]::SetEnvironmentVariable('AWS_SHARED_CREDENTIALS_FILE', 'C:\Windows\System32\config\systemprofile\.aws\credentials', 'User')

参考資料

[1] SSM Agent と統合 CloudWatch エージェントを使用するオンプレミスサーバーで、一時的な認証情報のみを使用するように設定する | AWS re:Post

[2] ステップ 4: ハイブリッドおよびマルチクラウド環境に SSM Agent をインストールする (Windows) - AWS Systems Manager

[3] Windows AWS Tools for PowerShell への のインストール - AWS Tools for PowerShell

[4] 20秒で終わるWindows日本語(utf-8)出力解決

[5] AWS CLI を設定する環境変数 - AWS Command Line Interface

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.